<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Organizacion_persona_lst( $this );

class Organizacion_persona_lst extends Lst
	{
	function Organizacion_persona_lst( &$oModule )
		{
			$this->Lst( $oModule );
		}
	function setLevel()
		{
			switch ( $this->getOptionView() )
			{
				case 'L':
					$this->aShowColumns = array( 'Organizacion', 'Nombre', 'Cargo' , 'Domicilio' );
					break;
			}
			if ( array_key_exists( 'ncOrganizacion' , $this->aFields )  ) unset($this->aShowColumns[array_search( 'Organizacion',$this->aShowColumns)]);
			if ( array_key_exists( 'ncPersona' , $this->aFields ) ) unset($this->aShowColumns[array_search( 'Nombre',$this->aShowColumns)]);
		}
	function initialize()
		{
			// Obtiene de su filtro los parametros que necesita para armar el query
			$oFiltro = $this->oModule->loadClass( 'organizacion_persona_frm' );
			$this->aFields = array_merge ( (array)$this->aFields,  (array)$oFiltro->getFieldArray() );
			$this->aFields['bRecursivo'] = getParam('bRecursivo');
			$this->setTitle ( "Organizacion - Contactos" );
			$this->setSummary( "Esta tabla contiene el listado de contactos de una Organizacion" );
			$this->addColumn ( 'Organizacion', 'cdOrganizacion', true );
			$this->addColumn ( 'Nombre', '', 'cApellido' );
			$this->addColumn ( 'Domicilio', '' );
			$this->addColumn ( 'Cargo', 'cCargo' );
			$this->addColumn ( 'Area', 'cdArea' );
			$this->addColumn ( 'Telefono Area', 'cTelefonoArea' );
			$this->addColumn ( 'Email Area', 'cEmailArea' );
			$this->addColumn ( 'Telefono', '' );
			$this->addColumn ( 'Email Laboral', 'cEmail' );
			$this->addColumn ( 'Directo', 'cDirecto' );
			$this->addColumn ( 'Celular', 'cCelular' );
			$this->setColumnAction ( 'Nombre', VER_PERSONA, 'ncPersona');
			$this->setColumnAction ( 'Organizacion', VER_ORGANIZACION, 'ncOrganizacion');
			$this->setColumnAction ( 'Domicilio', VER_DOMICILIO, 'ncDomicilio');
		}
	function makeColumn ( $aRow, $cField )
		{
			switch( $cField )
			{
				case 'Nombre':
					if ( $aRow['cTratamiento'] ) $cReturn = $aRow['cTratamiento'] . ' ';
					$cReturn .= $aRow['cNombre'] . ' ' . $aRow['cApellido'];
					break;
				case 'Telefono':
					$cReturn = '';
					$this->oDomicilio->setValue( $aRow["ncDomicilio"] );
					if ( $aRow["ncDomicilio"] ) $cReturn = '(' . $this->oDomicilio->aFields['cPrefijoTelefono']->getValue() .' )'. $this->oDomicilio->aFields['cTelefono']->getValue();
					if ( $aRow["cInterno"] ) $cReturn .= ' Int. ' .  $aRow["cInterno"];
					return $cReturn;
					break;
				case 'Domicilio':
					$cReturn = '';
					$this->oDomicilio->setValue( $aRow["ncDomicilio"] );
					if ( $aRow["ncDomicilio"] ) $cReturn = $this->oDomicilio->getDescription();
					if ( $aRow["cOficina"] )
					{
						list( $cPiso , $cDepto ) = explode( "|", $aRow['cOficina'] );
						if ( $cPiso ) $cReturn .= " Piso $cPiso ";
						if ( $cDepto ) $cReturn .= " Of. $cDepto";
					}
					if ( $aRow["ncDomicilio"] ) $cReturn .= ', ' . $this->oDomicilio->getUbicacion();
					break;
				default:
					return false;
				break;
			}
			return $cReturn ;
		}
	function obtenerAreaInferiores ( $ncOrganizacion, $ncArea )
	{
		$aArea[] = $ncArea;
		for( $nIndex = 0; $nIndex < count($aArea); $nIndex++ )
		{
			$cSql = "SELECT ncArea FROM atOrganizacionArea WHERE ncOrganizacion= $ncOrganizacion AND ncAreaPadre = " . $aArea[$nIndex];
			$aSubAreas = $this->oDatabase->getArray($cSql);
			foreach($aSubAreas as $ncSubArea )
			{
				$aArea[] = $ncSubArea;
			}
		}
		return $aArea;
	}
	function query()
		{
            $this->oDomicilio = $this->oModule->loadClass( 'Domicilio_frm' );
			// Convierte a variables el aFields
				extract( $this->getFieldArray() );
				$ncMiGrupo = obtenerMiGrupo();
			if ( $cNombre ) str_replace( ' ', '%', $cNombre);
			// Arma el Query
				$cSql = "SELECT Per.cNombre, Per.cApellido, OPe.cInterno, Org.cdOrganizacion, Per.ncPersona, Org.ncOrganizacion, OPe.cCargo, OAr.cdArea, OAr.cTelefono as cTelefonoArea, OAr.cEmail as cEmailArea, OPe.ncDomicilio, OPe.cDirecto, PEm.cEmail, OPe.cOficina, Pro.cTratamiento, Per.cCelular
												FROM atOrganizacionPersona as OPe
												JOIN atPersona as Per
													ON Per.ncPersona = OPe.ncPersona
												LEFT JOIN atProfesion Pro
													ON Pro.ncProfesion = Per.ncProfesion
												LEFT JOIN atPersonaEmail as PEm
													ON PEm.ncPersona = OPe.ncPersona
													AND PEm.ncOrganizacion = OPe.ncOrganizacion
												JOIN atOrganizacion as Org
													ON Org.ncOrganizacion = OPe.ncOrganizacion
												LEFT JOIN atOrganizacionArea as OAr
													ON OAr.ncOrganizacion = OPe.ncOrganizacion
													AND OAr.ncArea = OPe.ncArea";
				$cSql .= armarJoin ( " JOIN atPersonaEmail AS Ema ON Ema.ncPersona = OPe.ncPersona AND Ema.ncOrganizacion  = OPe.ncOrganizacion AND Ema.cEmail LIKE '%$cEmail%' ", $cEmail);
			// Arma el Filtro de la Consulta
				//$this->oWhere->add ( "OPe.ncGrupo", $ncGrupo );
				
				
				$this->oWhere->addExpression ( "OPe.bBaja", "OPe.bBaja = 0" );
				$this->oWhere->addExpression ( "Per.bBaja", "Per.bBaja = 0" );
				$this->oWhere->addExpression ( "Org.bBaja", "Org.bBaja = 0" );
				if ( $ncMiGrupo )
					$this->oWhere->addExpression ( "OPe.ncVisibilidad", " (OPe.ncVisibilidad <> " . VISIBILIDAD_PRIVADO . " OR OPe.ncGrupo = $ncMiGrupo) " );
				else
					$this->oWhere->addExpression ( "OPe.ncVisibilidad", " OPe.ncVisibilidad = " . VISIBILIDAD_PUBLICO );
				$cNombre  = $this->aFields[cNombre];
				if ( $cNombre ) $this->oWhere->addExpression ( "Org.cdOrganizacion",  "Org.cdOrganizacion LIKE '%$cNombre%' OR   Org.cSigla LIKE '%$cNombre%' OR concat( ' ' , Per.cNombre, ' ',  Per.cApellido) LIKE '%$cNombre%' OR Per.cAlias LIKE '%$cNombre%' " );
				if ( $this->aFields[bRecursivo] && $this->aFields[ncArea] )
				{
					$aAreasInferiores  = $this->obtenerAreaInferiores ( $this->aFields[ncOrganizacion], $this->aFields[ncArea] );
					$this->oWhere->addExpression ( "OPe.ncArea", "OPe.ncArea IN ( " . implode(',', $aAreasInferiores )  . " ) " );
				} else $this->oWhere->add ( "OPe.ncArea", $ncArea);
				$this->oWhere->add ( 'OPe.ncOrganizacion', $ncOrganizacion );
				$this->oWhere->add ( 'OPe.ncPersona', $ncPersona );
				$cSql .= $this->oWhere->make();
			return $cSql;
		}
	function makeListActions()
		{
			$this->oModule->setBack();
			if ( $this->aFields['ncOrganizacion'] )
			{
				$this->addListAction (  AGREGAR_UNA_PERSONA_A_UNA_ORGANIZACION , "ncOrganizacion=" . $this->aFields['ncOrganizacion'] , 'I', VENTANA_SECUNDARIA);
			} elseif ( $this->aFields['ncPersona'] )
			{
				$this->addListAction (  AGREGAR_UNA_ORGANIZACION_A_UNA_PERSONA, "ncPersona=" . $this->aFields['ncPersona'], 'I', VENTANA_SECUNDARIA );
			} else
				$this->addListAction (  AGREGAR_UNA_PERSONA_Y_ORGANIZACION, '',  'I', VENTANA_SECUNDARIA );
		}
	function makeRowActions( $aRow )
		{
			$cParametroRegistro =  "ncOrganizacion=" . $aRow["ncOrganizacion"] . "&amp;ncPersona=" . $aRow["ncPersona"];
			$this->addRowAction ( MODIFICAR_EL_CARGO_DE_UNA_PERSONA, $cParametroRegistro , '', VENTANA_SECUNDARIA );
			$this->addRowAction ( ELIMINAR_UNA_ORGANIZACION_DE_UNA_PERSONA, $cParametroRegistro );
			//$this->addRowAction ( CONSULTAR_PERSONAS, $cParametroRegistro , '', '', 'body_main');
			//$this->addRowAction ( CONSULTAR_ORGANIZACIONES, $cParametroRegistro, '', '', 'body_main' );
		}
	}
?>
